package cn.swu.lyx.homework1

import android.app.ListActivity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.PersistableBundle
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import android.view.View
import android.widget.*
import androidx.appcompat.app.AlertDialog
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import java.util.*
import kotlin.collections.ArrayList

class MainActivity : AppCompatActivity() {

    val TAG="!!MainActivity"          //便于后面日志查询
    private var username:String?=null //?表示可为空
    private var password:String?=null

    private val fruitList=ArrayList<Fruit>()  //测试用的

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main) //固定规矩展示页面用的

        val inputName=findViewById<EditText>(R.id.username)//得到编辑框内文本
        val inputPassword=findViewById<EditText>(R.id.password)
        //监视用户名的一个情况 用日志打出 继承了TextWatcher 要重写三个方法
        val userWatcher=object:TextWatcher{

            //文本改变前调用
            override fun beforeTextChanged(s: CharSequence?, start: Int, after: Int, count: Int) {
                Log.i(TAG,"beforeTextChanged:$s")
                //采用了日志打印 i为第三等级
                //CharSequence s：文本改变之前的内容
                //int start：文本开始改变时的起点位置，从0开始计算
                //int after：改变后添加的文本字数，即替代选中文本后的文本字数
                //int count：要被改变的文本字数，即将要被替代的选中文本字数
                //在当前文本s中，从start位置开始之后的count个字符（即将）要被after个字符替换掉
            }

            //文本改变时调用 在当前文本s中，从start位置开始之后的after个字符（已经）被count个字符替换掉了
            override fun onTextChanged(s: CharSequence?, start: Int, after: Int, count: Int) {
                Log.i(TAG,"onTextChanged:$s")
            }

            //文本改用后调用 该方法是在执行完beforeTextChanged、onTextChanged两个方法后才会被调用，此时的文本s为最终显示给用户看到的文本
            override fun afterTextChanged(s: Editable?) {
                Log.i(TAG,"afterTextChanged:$s")
                username=s?.toString() //将该改后的文本存入变量username
            }

        }
        //监视密码的一个情况 用日志打出 继承了TextWatcher 要重写三个方法
        val passwordWatcher=object:TextWatcher{

            //文本改变前调用
            override fun beforeTextChanged(s: CharSequence?, start: Int, after: Int, count: Int) {
                Log.i(TAG,"beforeTextChanged:$s")
                //采用了日志打印 i为第三等级
                //CharSequence s：文本改变之前的内容
                //int start：文本开始改变时的起点位置，从0开始计算
                //int after：改变后添加的文本字数，即替代选中文本后的文本字数
                //int count：要被改变的文本字数，即将要被替代的选中文本字数
                //在当前文本s中，从start位置开始之后的count个字符（即将）要被after个字符替换掉
            }

            //文本改变时调用 在当前文本s中，从start位置开始之后的after个字符（已经）被count个字符替换掉了
            override fun onTextChanged(s: CharSequence?, start: Int, after: Int, count: Int) {
                Log.i(TAG,"onTextChanged:$s")
            }

            //文本改用后调用 该方法是在执行完beforeTextChanged、onTextChanged两个方法后才会被调用，此时的文本s为最终显示给用户看到的文本
            override fun afterTextChanged(s: Editable?) {
                Log.i(TAG,"afterTextChanged:$s")
                password=s?.toString() //将该改后的文本存入变量username
            }

        }
        inputName.addTextChangedListener(userWatcher)
        inputPassword.addTextChangedListener(passwordWatcher)
    }
    //设置登陆的点击事件
    fun onClick(view:View){
        //日志事件 输出最终确定的用户名和密码
        Log.d(TAG,"username=$username")
        Log.d(TAG,"password=$password")

        //消息弹框设置，用于消息的确认
        AlertDialog.Builder(this)
            .setTitle("请确认")
            .setMessage("是否进入Bubble Tea页面？")
            .setNegativeButton("取消"){
                d,w->Toast.makeText(this,"已取消",Toast.LENGTH_SHORT).show()
            }
            .setPositiveButton("确定"){
                d,w->loginPage()
            }.show()
    }
    //设计点击确认后进度条的一个变化
    private fun loginPage(){
        val process=findViewById<ProgressBar>(R.id.progressBar)
        val context=this
        //当点击后进度条开始显示 从零开始
        process.visibility=View.VISIBLE
        process.progress=0
        //模拟请求网络耗时
        val timer= Timer()
        val task=object :TimerTask(){
            override fun run() {
                //日志打印查看进度条情况
                Log.d(TAG,"progress=${process.progress}")
                process.progress=process.progress+10
                //每次增加10 直至100
                if(process.progress==100){
                    timer.cancel()
                    //俩种方式
//                    runOnUiThread{
//                        //进度条又隐藏
//                        process.visibility=View.GONE
//                    }
                    Handler(Looper.getMainLooper()).post {
                        process.visibility = View.GONE
                        val intent=Intent(context,MilkTeaListActivity::class.java)
                        startActivity(intent)
                    }
                }
            }
        }
        timer.schedule(task,0,1000)
    }

}